{extend name="layout" /}


{block name="title"}
<title>自定义字段 - thinkPHP极速后台开发</title>
<meta name="title" content="自定义字段 - thinkPHP极速后台开发">
<meta name="keywords" content="表单,列表,详情,过滤器自定义字段,php,后台开发包，thinkphp、easyadmin、admin,easy,thinkeasyadmin">
<meta name="description" content="表单,列表,详情,过滤器自定义字段;easyadmin灵活可定制的thinkphp的后台开发工具包,助你快速开发后台">
{/block}

{block name="main"}

<fieldset id="join" class="layui-elem-field">
    <legend>自定义字段</legend>
    <div class="layui-field-box">

        <p><code>列表字段</code> 只需要 继承<code>easyadmin\app\columns\lists\BaseList</code>类,然后根据业务重写即可</p>
        <p><code>表单字段</code> 只需要 继承<code>easyadmin\app\columns\form\BaseForm</code>类,然后根据业务重写即可</p>

        <h4>1. 创建字段类</h4>
        <pre class="php">
#project\app\admin\fields\ListNameField.php

namespace app\admin\fields;


use easyadmin\app\columns\lists\BaseList;


/**
 * Class ListNameField
 * @package app\admin\fields
 */
class ListNameField extends BaseList
{

    protected $jsFiles = []; //内置的 js 资源文件的
    protected $cssFiles = []; //内置的 css 资源文件的

    //指端模板路径 , 会在 当前模块中的 views 目录中查找
    // 本次定义查找路径位 project\app\admin\views\list\list_name.html
    protected $templatePath = 'list:list_name';


    //开放调用者的属性,
    protected $options = [

        //'template'=>'',
        //'attr' => '',//属性
        //'class' => '',//样式表
        //'format' => null,//格式化输出,格式化给用户看  例如: Y-m-d H:i:s  |  匿名函数 ;
        //'in_format' => null,//格式化输入,格式化后操作数据库或者存入数据库  strtotime | 匿名函数
        //'highlight' => false, //包含搜索的值是否高亮 ; false 关闭高亮, 不写或者 true 开启高亮
        //'default' => null,//默认值
        //'filter_callback' => null,//过滤器回调 参数有2个  query查询对象  $alias别名
        //'end_field' => null,//日期时间范围选择器, 第二个字段

        // ... 自定义更多属性
        // 获取属性的方法  $default = $this->getOption('default','zhangSan');
    ];


    /**
     * 可根据业务需要重写
     *
     * 格式化后输出到界面
     * @return bool|int|mixed|string|null
     */
    public function formatValue(){
        // 获取一个属性
        // $default = $this->getOption('default','zhangSan');

        $val = $this->getValue();
        return $val;
    }


    /**
     * 可根据业务需要重写
     *
     * 设置界面可用的变量
     * @return array
     */
    protected function getData(): array
    {
        $elemId = 'id_' . $this->getSelectAlias() . '_' . $this->row->getRowId();

        return [
            'field' => $this->getField(),//列的字段
            'row' => $this->row->getRow(), //行的数据 array
            'row_id' => $this->row->getRowId(), //行的主键值
            'attr' => $this->getOption('attr', ''), //列的属性
            'class' => $this->getOption('class', ''), //列的样式
            //dom 元素 id
            'elem_id' => str_replace(':', '_', $elemId),
        ];
    }




}


        </pre>
        <h4>2. 创建模板</h4>
        <pre class="php">{literal}#project\app\admin\views\list\list_name.html

<h3>自定义列表字段</h3>
<p>可用变量</p>
value: {$value} 本列的值 <br>
field: {$field} 当前字段名称 <br>
row: {:var_dump($row)} 本行数据 <br>
row_id: {$row_id} 行ID<br>
attr: {$attr} 属性<br>
class: {$class} 样式表<br>
elem_id: {$elem_id} 本列ID<br>
static_root: {$static_root} 资源目录<br>

 {/literal}</pre>
        <h4>3. 调用</h4>
        <pre class="php">
#project\app\admin\controller\Category.php

namespace app\admin\controller;

use app\admin\fields\ListNameField;
use easyadmin\app\libs\ListField;

class Category extends \easyadmin\controller\Admin
{

    /**
     * 配置列表字段
     * @param ListField $list
     */
    protected function configListField(ListField $list)
    {
        $list
            // 自定义字段调用
            ->addField('name', '分类名称', ListNameField::class,[
                // 更多属性
            ])
    }

}
        </pre>
    </div>
</fieldset>


{/block}
